package com.yuanqi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yuanqi.entity.WareStockCount;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author HP
* @description 针对表【ware_stock_count(盘点单)】的数据库操作Service
* @createDate 2025-08-26 14:58:48
*/
public interface WareStockCountService extends IService<WareStockCount> {

    /**
     * 分页查询盘点单
     * @param page 页码
     * @param size 每页大小
     * @param countCode 盘点单号
     * @param warehouseId 仓库ID
     * @param status 状态
     * @return 分页数据
     */
    IPage<WareStockCount> listStockCounts(Integer page, Integer size, String countCode, Long warehouseId, Integer status);
    
    /**
     * 获取盘点单详情
     * @param id 盘点单ID
     * @return 盘点单详情，包含盘点明细项
     */
    Map<String, Object> getStockCountDetail(Long id);
    
    /**
     * 创建盘点单
     * @param stockCount 盘点单信息
     * @param items 盘点明细项
     * @return 是否成功
     */
    boolean createStockCount(WareStockCount stockCount, List<Map<String, Object>> items);
    
    /**
     * 提交盘点单审核
     * @param id 盘点单ID
     * @return 是否成功
     */
    boolean submitStockCount(Long id);
    
    /**
     * 审核盘点单
     * @param id 盘点单ID
     * @return 是否成功
     */
    boolean approveStockCount(Long id);
    
    /**
     * 驳回盘点单
     * @param id 盘点单ID
     * @return 是否成功
     */
    boolean rejectStockCount(Long id);
    
    /**
     * 执行盘点调整
     * @param id 盘点单ID
     * @return 是否成功
     */
    boolean executeStockCount(Long id);
    
    /**
     * 更新盘点单
     * @param stockCount 盘点单信息
     * @param items 盘点明细项
     * @return 是否成功
     */
    boolean updateStockCount(WareStockCount stockCount, List<Map<String, Object>> items);
    
    /**
     * 生成盘点任务（根据仓库自动生成库存商品）
     * @param warehouseId 仓库ID
     * @return 盘点单ID
     */
    Long generateStockCountTask(Long warehouseId);
}
